﻿///////////////////////////////////////////////////////////////////////////////
//
// This file is part of the BassDrop project
//   https://code.google.com/p/bass-drop/
//
//
// Creator:	Gergely Krajcsovszki (krajcsovszkig@hotmail.com)
// Date:	2014-03-29 12:25
//
//
// Copyright © 2013-2014. Gergely Krajcsovszki
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
///////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BassDrop.Core.Common.Services
{
	/// <summary>
	/// Interface for showing various UI elements to the user from portable class libraries
	/// </summary>
	public interface IUserInterface
	{
		/// <summary>
		/// Display a message box to the user with the specified message and options and wait for them to close it. Return which button the user clicked.
		/// </summary>
		/// <param name="messageBoxText">The text to display in the message box.</param>
		/// <param name="caption">The title / caption of the message box.</param>
		/// <param name="button">The buttons of the message box.</param>
		/// <param name="icon">The icon in the message box. May not be supported on all platforms, then it does nothing. Default is no image.</param>
		/// <returns></returns>
		PortableMessageBoxResult ShowMessageBox( string messageBoxText, string caption, PortableMessageBoxButton button, PortableMessageBoxImage icon = PortableMessageBoxImage.None );
	}

	/// <summary>
	/// Specifies the buttons that are displayed on a message box.
	/// </summary>
	public enum PortableMessageBoxButton
	{
		/// <summary>
		/// The message box displays an OK button.
		/// </summary>
		OK,
		/// <summary>
		/// The message box displays OK and Cancel buttons.
		/// </summary>
		OKCancel,
		/// <summary>
		/// The message box displays Yes and No buttons.
		/// </summary>
		YesNo,
		/// <summary>
		/// The message box displays Yes, No, and Cancel buttons.
		/// </summary>
		YesNoCancel
	}

	/// <summary>
	/// Specifies the icon that is displayed by a message box.
	/// </summary>
	public enum PortableMessageBoxImage
	{
		/// <summary>
		/// The message box contains a symbol consisting of a lowercase letter i in a circle.
		/// </summary>
		Asterisk,
		/// <summary>
		/// The message box contains a symbol consisting of white X in a circle with a red background.
		/// </summary>
		Error,
		/// <summary>
		/// The message box contains a symbol consisting of an exclamation point in a triangle with a yellow background.
		/// </summary>
		Exclamation,
		/// <summary>
		/// The message box contains a symbol consisting of a white X in a circle with a red background.
		/// </summary>
		Hand,
		/// <summary>
		/// The message box contains a symbol consisting of a lowercase letter i in a circle.
		/// </summary>
		Information,
		/// <summary>
		/// No icon is displayed.
		/// </summary>
		None,
		/// <summary>
		/// The message box contains a symbol consisting of a question mark in a circle.
		/// </summary>
		Question,
		/// <summary>
		/// The message box contains a symbol consisting of white X in a circle with a red background.
		/// </summary>
		Stop,
		/// <summary>
		/// The message box contains a symbol consisting of an exclamation point in a triangle with a yellow background.
		/// </summary>
		Warning
	}

	/// <summary>
	/// Specifies which message box button that a user clicks.
	/// </summary>
	public enum PortableMessageBoxResult
	{
		/// <summary>
		/// The result value of the message box is Cancel.
		/// </summary>
		Cancel,
		/// <summary>
		/// The result value of the message box is No.
		/// </summary>
		No,
		/// <summary>
		/// The message box returns no result.
		/// </summary>
		None,
		/// <summary>
		/// The result value of the message box is OK.
		/// </summary>
		OK,
		/// <summary>
		/// The result value of the message box is Yes.
		/// </summary>
		Yes
	}
}
